上一篇我讓 AI 開始考慮 Deadline,但如果我現在只有 30 分鐘。有一個任務很重要,而且 Deadline 也很近,但是預估需要 3 個小時,AI 還是直接把這個任務排在第一個,好像也沒有真的解決「我現在該做什麼」這個問題。
所以 Day 14 要讓 AI 開始知道:
「使用者現在有多少時間可以做事情?」
available_minutes = request.args.get("available_minutes", type=int)
我讓 /ai/rank 接收一個 available_minutes 參數
/ai/rank?available_minutes=30
就代表使用者現在有 30 分鐘可以使用。
如果改成:
/ai/rank?available_minutes=180
就代表現在有 180 分鐘。
新增目前可用時間參數
available_minutes = request.args.get("available_minutes", type=int)
再告訴prompt
目前使用者可以使用的時間是:
{available_minutes} 分鐘
然後多加幾個判斷
如果任務預估時間小於或等於目前可用時間,
可以優先考慮這類任務。
如果任務預估時間超過目前可用時間,
不代表不能做,仍然要綜合 Deadline、重要程度和進度判斷。
完整程式碼如下:
@app.route("/ai/rank", methods=["GET"])
def ai_rank():
available_minutes = request.args.get("available_minutes", type=int)
conn = get_connection()
cursor = conn.cursor(dictionary=True)
cursor.execute("""
SELECT
task_id,
title,
description,
estimated_minutes,
importance,
deadline,
progress,
status
FROM tasks
WHERE status != 'done'
""")
tasks = cursor.fetchall()
cursor.close()
conn.close()
prompt = f"""
你是一個待辦事項管理助手。
以下是使用者目前尚未完成的任務:
{tasks}
目前使用者可以使用的時間是:
{available_minutes} 分鐘
請根據以下條件判斷任務的優先順序:
1. Deadline 越接近,優先程度越高。
2. 重要程度越高,優先程度越高。
3. 已經開始進行的任務,請考慮其目前進度。
4. 如果 Deadline 和重要程度互相衝突,
請綜合兩者判斷,不要只看其中一項。
5. 請考慮使用者目前可用的時間。
6. 如果任務預估時間小於或等於目前可用時間,
可以優先考慮這類任務。
7. 如果任務預估時間超過目前可用時間,
不代表不能做,仍然要綜合 Deadline、重要程度和進度判斷。
8. 如果兩個任務條件接近,
請優先考慮 Deadline 較近的任務。
9. 請為每個任務提供排序原因。
請從最應該先做的任務開始排序。
非常重要:
- 只能回傳 JSON。
- 不要使用 Markdown。
- 不要加入 ```json。
- 不要加入任何說明文字。
- 第一個字元必須是 [
- 最後一個字元必須是 ]
JSON 格式如下:
[
{{
"task_id": 1,
"priority": 1,
"reason": "原因"
}}
]
"""
response = client.models.generate_content(
model="gemini-3.5-flash-lite",
contents=prompt
)
result = json.loads(response.text)
return result
為了確認這個條件真的有被 AI 考慮,我用了同一批任務測試兩次。
第一次告訴 AI:現在只有 30 分鐘。
第二次則改成:現在有 90 分鐘。

目前這個做法還沒有真的做到很完整。例如「剩餘時間」和「可用時間」之間要怎麼判斷、不同條件衝突時到底該怎麼取捨,還可以再調整。
不過至少現在,如果我只剩 30 分鐘,系統不會完全用跟我有 3 小時一樣的方式思考。
下一篇,我還想繼續把這個「現在的狀況」描述得更完整。